昨天廢文發完,突然有三個夥伴追蹤
感人,已哭已哭唷QQ
require 是 node.js 原生的模組引入方式,屬於 commonJS
import 是 ES6 的模組引入方式,屬於 ES modules
1. 加載時
require 是同步的 => 前一個 require 還未完成時,不會執行下一行.
import 是異步的 => 不用擔心阻斷後面程式碼
2. 引入條件
require 可以在函式、條件語句裡面直接使用
import 則不行.
但在條件語句內,若搭配 promise 語句來 import,是可行的.
用法會是像這樣
if (userInput === 'loadModule') {
import('./module-name.js')
.then((module) => {
.
.
.
3. tree shaking
import 支援靜態分析工具(如 webpack、Rollup 等)進行 tree shaking
require則不行
process.nextTick
是微任務/在當前事件循環完成後,下一個事件開始執行之前執行
setImmediate
是宏任務/在當前事件循環完成後,在下一個事件循環開始時立即執行
範例
console.log('Start');
process.nextTick(() => {
console.log('nextTick');
});
setImmediate(() => {
console.log('setImmediate');
});
console.log('End');
輸出結果
Start->End->nextTick->setImmediate
原因
第一個事件循環:Start->End->nextTick
第二個事件循環:setImmediate
這範例的第一個事件循環由 "同步代碼+微任務" 組成
意即兩個 console.log + nextTick 會先執行
事件循環完成後,再執行下一個宏任務,也就是下一個事件循環 setImmediate
參考資料:
https://nodejs.org/en/learn/asynchronous-work/understanding-setimmediate